<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>4.5. Carga din&aacute;mica de clases</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="ch04.html" title="Cap&iacute;tulo 4. Elementos de pantalla avanzados">
      <link rel="prev" href="ch04s04.html" title="4.4. Control de la Navegaci&oacute;n. Saltando entre ventanas">
      <link rel="next" href="Parte_3.html" title="Parte&nbsp;III.&nbsp;Complementos al desarrollo">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">4.5. Carga din&aacute;mica de clases</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="ch04s04.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Cap&iacute;tulo 4. Elementos de pantalla avanzados</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="Parte_3.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="section" title="4.5. Carga din&aacute;mica de clases">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title" style="clear: both"><a name="d4e3869"></a>4.5. Carga din&aacute;mica de clases
                  </h2>
               </div>
            </div>
         </div>
             
         
             
         <div class="section" title="4.5.1. Introducci&oacute;n">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a name="d4e3871"></a>4.5.1. Introducci&oacute;n
                     </h3>
                  </div>
               </div>
            </div>
                  
            
                  
            <p><a name="C4CargaDinamica"></a>Hasta ahora todos los ficheros que usamos en
               una aplicaci&oacute;n se cargan siempre independientemente de que se usen o no
               en el hilo actual de ejecuci&oacute;n. Puesto que normalmente no se usa m&aacute;s de
                     una clase de actions simult&aacute;neamente, esta situaci&oacute;n se puede mejorar si
                     cargamos las clases din&aacute;micamente, y puede notarse especialmente en las
                     aplicaciones grandes.
            </p>
            
                  
            <p>Desde la versi&oacute;n 5 de PHP, existe una funcionalidad nueva que
                     permite, cuando no se encuentra una clase, llamar a una funci&oacute;n de
                     usuario donde se incluya el fichero correspondiente. Aprovechando esta
                     funcionalidad nueva, se ha creado una clase en el framework que
                     permite:
            </p>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>registerClass</strong></span>: indicar cada
                                  clase en que fichero se ubica
                     </p>
                             
                  </li>
                  <li class="listitem">
                               
                     <p><span class="bold"><strong>registerFolder</strong></span>: permite
                                  almacenar carpetas en las que buscar las clases (siempre que su
                                  nombre coincida con un fichero con extensi&oacute;n php)
                     </p>
                             
                  </li>
               </ul>
            </div>
            
                  
            <p>Combinando los dos m&eacute;todos podemos configurar la carga de clases
                     de la manera m&aacute;s c&oacute;moda y eficiente teniendo en cuenta que:
            </p>
            
                  
            <div class="itemizedlist">
               <ul class="itemizedlist" type="disc">
                  <li class="listitem">
                               
                     <p>por defecto se registra la carpeta
                                  '<span class="emphasis"><em>actions</em></span>'
                     </p>
                             
                  </li>
                  <li class="listitem">
                               
                     <p>si una clase no se llama igual que el fichero que la contiene
                                  es necesario usar el m&eacute;todo
                                  '<span class="emphasis"><em>registerClass</em></span>'.
                     </p>
                             
                  </li>
               </ul>
            </div>
            
                  
            <p>En cualquier caso, si no se desea utilizar esta funcionalidad
                     basta con no invocar ninguno de los m&eacute;todos anteriores. En el fichero
                     include.php de la aplicaci&oacute;n podemos seguir haciendo los includes de la
                     manera tradicional.
            </p>
                
         </div>
         
             
         <div class="section" title="4.5.2. Ejemplos de utilizaci&oacute;n">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a name="d4e3891"></a>4.5.2. Ejemplos de utilizaci&oacute;n
                     </h3>
                  </div>
               </div>
            </div>
                  
            
                  
            <div class="informalexample">
                       
               
                       <pre class="programlisting">// obtenemos referencia al objeto
$al = GVHAutoLoad::singleton();

// registramos una carpeta donde tenemos clases
$al-&gt;<span class="bold"><strong>registerFolder</strong></span>('actions/listados');

// si tengo pocas clases en una carpeta puedo optar por registrarlas individualmente
$al-&gt;<span class="bold"><strong>registerClass</strong></span>('cabFactura', 'actions/factura/cabFactura.php');
$al-&gt;registerClass('linFactura', 'actions/factura/linFactura.php');

// si las clases no se llaman igual que el fichero donde se encuentran,
// no hay mas remedio que registrarlar individualmente
$al-&gt;registerClass('TinvTipos2',    'actions/TinvTipos.php');
$al-&gt;registerClass('TinvSubtipos2', 'actions/TinvSubtipos.php');

...</pre>
                     </div>
                
         </div>
           
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="ch04s04.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="ch04.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="Parte_3.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">4.4. Control de la Navegaci&oacute;n. Saltando entre ventanas&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;Parte&nbsp;III.&nbsp;Complementos al desarrollo</td>
            </tr>
         </table>
      </div>
   </body>
</html>